package com.micro.ai.commons.constant;

/**
 * Agent相关常量
 * 
 * @author micro-ai
 * @since 0.0.1
 */
public interface AgentConstants {

    /**
     * Agent状态枚举
     */
    enum AgentStatus {
        DRAFT("draft", "草稿"),
        ACTIVE("active", "激活"),
        INACTIVE("inactive", "未激活"),
        TRAINING("training", "训练中"),
        ERROR("error", "错误"),
        DELETED("deleted", "已删除");
        
        private final String code;
        private final String description;
        
        AgentStatus(String code, String description) {
            this.code = code;
            this.description = description;
        }
        
        public String getCode() {
            return code;
        }
        
        public String getDescription() {
            return description;
        }
    }
    
    /**
     * Agent能力类型枚举
     */
    enum AgentCapability {
        TEXT_GENERATION("text_generation", "文本生成"),
        TEXT_CLASSIFICATION("text_classification", "文本分类"),
        TEXT_SUMMARIZATION("text_summarization", "文本摘要"),
        QUESTION_ANSWERING("question_answering", "问答"),
        TRANSLATION("translation", "翻译"),
        CODE_GENERATION("code_generation", "代码生成"),
        IMAGE_GENERATION("image_generation", "图像生成"),
        VOICE_SYNTHESIS("voice_synthesis", "语音合成"),
        DATA_ANALYSIS("data_analysis", "数据分析"),
        AUTOMATION("automation", "自动化");
        
        private final String code;
        private final String description;
        
        AgentCapability(String code, String description) {
            this.code = code;
            this.description = description;
        }
        
        public String getCode() {
            return code;
        }
        
        public String getDescription() {
            return description;
        }
    }
    
    /**
     * 模型类型枚举
     */
    enum ModelType {
        LLM("llm", "大语言模型"),
        EMBEDDING("embedding", "嵌入模型"),
        CLASSIFICATION("classification", "分类模型"),
        REGRESSION("regression", "回归模型"),
        CLUSTERING("clustering", "聚类模型"),
        ANOMALY_DETECTION("anomaly_detection", "异常检测模型"),
        RECOMMENDATION("recommendation", "推荐模型"),
        TIME_SERIES("time_series", "时间序列模型");
        
        private final String code;
        private final String description;
        
        ModelType(String code, String description) {
            this.code = code;
            this.description = description;
        }
        
        public String getCode() {
            return code;
        }
        
        public String getDescription() {
            return description;
        }
    }
    
    /**
     * 模型提供商枚举
     */
    enum ModelProvider {
        OPENAI("openai", "OpenAI"),
        ANTHROPIC("anthropic", "Anthropic"),
        GOOGLE("google", "Google"),
        META("meta", "Meta"),
        MICROSOFT("microsoft", "Microsoft"),
        BAIDU("baidu", "百度"),
        ALIBABA("alibaba", "阿里巴巴"),
        TENCENT("tencent", "腾讯"),
        HUGGINGFACE("huggingface", "Hugging Face"),
        OLLAMA("ollama", "Ollama");
        
        private final String code;
        private final String description;
        
        ModelProvider(String code, String description) {
            this.code = code;
            this.description = description;
        }
        
        public String getCode() {
            return code;
        }
        
        public String getDescription() {
            return description;
        }
    }
    
    /**
     * 默认配置常量
     */
    interface DefaultConfig {
        /** 默认模型名称 */
        String DEFAULT_MODEL_NAME = "gpt-3.5-turbo";
        
        /** 默认温度参数 */
        Double DEFAULT_TEMPERATURE = 0.7;
        
        /** 默认最大令牌数 */
        Integer DEFAULT_MAX_TOKENS = 2048;
        
        /** 默认超时时间（秒） */
        Integer DEFAULT_TIMEOUT = 30;
        
        /** 默认重试次数 */
        Integer DEFAULT_RETRY_COUNT = 3;
        
        /** 默认并发数 */
        Integer DEFAULT_CONCURRENCY = 10;
    }
}
